<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>Geo-shape datatype | Elasticsearch Guide [7.7] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch Guide [7.7]">
<link rel="up" href="mapping-types.html" title="Field datatypes">
<link rel="prev" href="geo-point.html" title="Geo-point datatype">
<link rel="next" href="ip.html" title="IP datatype">
<meta name="DC.type" content="Learn/Docs/Elasticsearch/Reference/7.7">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="7.7">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<strong>IMPORTANT</strong>: No additional bug fixes or documentation updates
will be released for this version. For the latest information, see the
<a href="../current/index.html">current release documentation</a>.
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch Guide [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="mapping.html">Mapping</a></span>
»
<span class="breadcrumb-link"><a href="mapping-types.html">Field datatypes</a></span>
»
<span class="breadcrumb-node">Geo-shape datatype</span>
</div>
<div class="navheader">
<span class="prev">
<a href="geo-point.html">« Geo-point datatype</a>
</span>
<span class="next">
<a href="ip.html">IP datatype »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="geo-shape"></a>Geo-shape datatype<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h2>
</div></div></div>

<p>The <code class="literal">geo_shape</code> datatype facilitates the indexing of and searching
with arbitrary geo shapes such as rectangles and polygons. It should be
used when either the data being indexed or the queries being executed
contain shapes other than just points.</p>
<p>You can query documents using this type using
<a class="xref" href="query-dsl-geo-shape-query.html" title="Geo-shape query">geo_shape Query</a>.</p>
<h4>
<a id="geo-shape-mapping-options"></a>Mapping Options<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h4>
<p>The geo_shape mapping maps geo_json geometry objects to the geo_shape
type. To enable it, users must explicitly map fields to the geo_shape
type.</p>
<div class="informaltable">
<table border="1" cellpadding="4px">
<colgroup>
<col class="col_1">
<col class="col_2">
<col class="col_3">
</colgroup>
<thead>
<tr>
<th align="left" valign="top">Option</th>
<th align="left" valign="top">Description</th>
<th align="left" valign="top">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p><code class="literal">tree</code></p></td>
<td align="left" valign="top"><p><span class="Admonishment Admonishment--change">
[<span class="Admonishment-version u-mono u-strikethrough">6.6</span>]
<span class="Admonishment-detail">
Deprecated in 6.6. PrefixTrees no longer used
</span>
</span> Name of the PrefixTree
implementation to be used: <code class="literal">geohash</code> for GeohashPrefixTree and <code class="literal">quadtree</code>
for QuadPrefixTree. Note: This parameter is only relevant for <code class="literal">term</code> and
<code class="literal">recursive</code> strategies.</p></td>
<td align="left" valign="top"><p><code class="literal">quadtree</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">precision</code></p></td>
<td align="left" valign="top"><p><span class="Admonishment Admonishment--change">
[<span class="Admonishment-version u-mono u-strikethrough">6.6</span>]
<span class="Admonishment-detail">
Deprecated in 6.6. PrefixTrees no longer used
</span>
</span> This parameter may
be used instead of <code class="literal">tree_levels</code> to set an appropriate value for the
<code class="literal">tree_levels</code> parameter. The value specifies the desired precision and
Elasticsearch will calculate the best tree_levels value to honor this
precision. The value should be a number followed by an optional distance
unit. Valid distance units include: <code class="literal">in</code>, <code class="literal">inch</code>, <code class="literal">yd</code>, <code class="literal">yard</code>, <code class="literal">mi</code>,
<code class="literal">miles</code>, <code class="literal">km</code>, <code class="literal">kilometers</code>, <code class="literal">m</code>,<code class="literal">meters</code>, <code class="literal">cm</code>,<code class="literal">centimeters</code>, <code class="literal">mm</code>,
<code class="literal">millimeters</code>. Note: This parameter is only relevant for <code class="literal">term</code> and
<code class="literal">recursive</code> strategies.</p></td>
<td align="left" valign="top"><p><code class="literal">50m</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">tree_levels</code></p></td>
<td align="left" valign="top"><p><span class="Admonishment Admonishment--change">
[<span class="Admonishment-version u-mono u-strikethrough">6.6</span>]
<span class="Admonishment-detail">
Deprecated in 6.6. PrefixTrees no longer used
</span>
</span> Maximum number
of layers to be used by the PrefixTree. This can be used to control the
precision of shape representations andtherefore how many terms are
indexed. Defaults to the default value of the chosen PrefixTree
implementation. Since this parameter requires a certain level of
understanding of the underlying implementation, users may use the
<code class="literal">precision</code> parameter instead. However, Elasticsearch only uses the
tree_levels parameter internally and this is what is returned via the
mapping API even if you use the precision parameter. Note: This parameter
is only relevant for <code class="literal">term</code> and <code class="literal">recursive</code> strategies.</p></td>
<td align="left" valign="top"><p>various</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">strategy</code></p></td>
<td align="left" valign="top"><p><span class="Admonishment Admonishment--change">
[<span class="Admonishment-version u-mono u-strikethrough">6.6</span>]
<span class="Admonishment-detail">
Deprecated in 6.6. PrefixTrees no longer used
</span>
</span> The strategy
parameter defines the approach for how to represent shapes at indexing
and search time. It also influences the capabilities available so it
is recommended to let Elasticsearch set this parameter automatically.
There are two strategies available: <code class="literal">recursive</code>, and <code class="literal">term</code>.
Recursive and Term strategies are deprecated and will be removed in a
future version. While they are still available, the Term strategy
supports point types only (the <code class="literal">points_only</code> parameter will be
automatically set to true) while Recursive strategy supports all
shape types. (IMPORTANT: see <a class="xref" href="geo-shape.html#prefix-trees" title="Prefix trees">Prefix trees</a> for more
detailed information about these strategies)</p></td>
<td align="left" valign="top"><p><code class="literal">recursive</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">distance_error_pct</code></p></td>
<td align="left" valign="top"><p><span class="Admonishment Admonishment--change">
[<span class="Admonishment-version u-mono u-strikethrough">6.6</span>]
<span class="Admonishment-detail">
Deprecated in 6.6. PrefixTrees no longer used
</span>
</span> Used as a
hint to the PrefixTree about how precise it should be. Defaults to 0.025 (2.5%)
with 0.5 as the maximum supported value. PERFORMANCE NOTE: This value will
default to 0 if a <code class="literal">precision</code> or <code class="literal">tree_level</code> definition is explicitly defined.
This guarantees spatial precision at the level defined in the mapping. This can
lead to significant memory usage for high resolution shapes with low error
(e.g., large shapes at 1m with &lt; 0.001 error). To improve indexing performance
(at the cost of query accuracy) explicitly define <code class="literal">tree_level</code> or <code class="literal">precision</code>
along with a reasonable <code class="literal">distance_error_pct</code>, noting that large shapes will have
greater false positives. Note: This parameter is only relevant for <code class="literal">term</code> and
<code class="literal">recursive</code> strategies.</p></td>
<td align="left" valign="top"><p><code class="literal">0.025</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">orientation</code></p></td>
<td align="left" valign="top"><p>Optionally define how to interpret vertex order for
polygons / multipolygons.  This parameter defines one of two coordinate
system rules (Right-hand or Left-hand) each of which can be specified in three
different ways. 1. Right-hand rule: <code class="literal">right</code>, <code class="literal">ccw</code>, <code class="literal">counterclockwise</code>,
2. Left-hand rule: <code class="literal">left</code>, <code class="literal">cw</code>, <code class="literal">clockwise</code>. The default orientation
(<code class="literal">counterclockwise</code>) complies with the OGC standard which defines
outer ring vertices in counterclockwise order with inner ring(s) vertices (holes)
in clockwise order. Setting this parameter in the geo_shape mapping explicitly
sets vertex order for the coordinate list of a geo_shape field but can be
overridden in each individual GeoJSON or WKT document.</p></td>
<td align="left" valign="top"><p><code class="literal">ccw</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">points_only</code></p></td>
<td align="left" valign="top"><p><span class="Admonishment Admonishment--change">
[<span class="Admonishment-version u-mono u-strikethrough">6.6</span>]
<span class="Admonishment-detail">
Deprecated in 6.6. PrefixTrees no longer used
</span>
</span> Setting this option to
<code class="literal">true</code> (defaults to <code class="literal">false</code>) configures the <code class="literal">geo_shape</code> field type for point
shapes only (NOTE: Multi-Points are not yet supported). This optimizes index and
search performance for the <code class="literal">geohash</code> and <code class="literal">quadtree</code> when it is known that only points
will be indexed. At present geo_shape queries can not be executed on <code class="literal">geo_point</code>
field types. This option bridges the gap by improving point performance on a
<code class="literal">geo_shape</code> field so that <code class="literal">geo_shape</code> queries are optimal on a point only field.</p></td>
<td align="left" valign="top"><p><code class="literal">false</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">ignore_malformed</code></p></td>
<td align="left" valign="top"><p>If true, malformed GeoJSON or WKT shapes are ignored. If
false (default), malformed GeoJSON and WKT shapes throw an exception and reject the
entire document.</p></td>
<td align="left" valign="top"><p><code class="literal">false</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">ignore_z_value</code></p></td>
<td align="left" valign="top"><p>If <code class="literal">true</code> (default) three dimension points will be accepted (stored in source)
but only latitude and longitude values will be indexed; the third dimension is ignored. If <code class="literal">false</code>,
geo-points containing any more than latitude and longitude (two dimensions) values throw an exception
and reject the whole document.</p></td>
<td align="left" valign="top"><p><code class="literal">true</code></p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">coerce</code></p></td>
<td align="left" valign="top"><p>If <code class="literal">true</code> unclosed linear rings in polygons will be automatically closed.</p></td>
<td align="left" valign="top"><p><code class="literal">false</code></p></td>
</tr>
</tbody>
</table>
</div>
<h4>
<a id="geoshape-indexing-approach"></a>Indexing approach<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h4>
<p>GeoShape types are indexed by decomposing the shape into a triangular mesh and
indexing each triangle as a 7 dimension point in a BKD tree. This provides
near perfect spatial resolution (down to 1e-7 decimal degree precision) since all
spatial relations are computed using an encoded vector representation of the
original shape instead of a raster-grid representation as used by the
<a class="xref" href="geo-shape.html#prefix-trees" title="Prefix trees">Prefix trees</a> indexing approach. Performance of the tessellator primarily
depends on the number of vertices that define the polygon/multi-polygon. While
this is the default indexing technique prefix trees can still be used by setting
the <code class="literal">tree</code> or <code class="literal">strategy</code> parameters according to the appropriate
<a class="xref" href="geo-shape.html#geo-shape-mapping-options" title="Mapping Options">Mapping Options</a>. Note that these parameters are now deprecated
and will be removed in a future version.</p>
<p><span class="strong strong"><strong>IMPORTANT NOTES</strong></span></p>
<p><code class="literal">CONTAINS</code> relation query - when using the new default vector indexing strategy, <code class="literal">geo_shape</code>
queries with <code class="literal">relation</code> defined as <code class="literal">contains</code> are supported for indices created with
ElasticSearch 7.5.0 or higher.</p>
<h4>
<a id="prefix-trees"></a>Prefix trees<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h4>
<p><span class="Admonishment Admonishment--change">
[<span class="Admonishment-version u-mono u-strikethrough">6.6</span>]
<span class="Admonishment-detail">
Deprecated in 6.6. PrefixTrees no longer used
</span>
</span> To efficiently represent shapes in
an inverted index, Shapes are converted into a series of hashes representing
grid squares (commonly referred to as "rasters") using implementations of a
PrefixTree. The tree notion comes from the fact that the PrefixTree uses multiple
grid layers, each with an increasing level of precision to represent the Earth.
This can be thought of as increasing the level of detail of a map or image at higher
zoom levels. Since this approach causes precision issues with indexed shape, it has
been deprecated in favor of a vector indexing approach that indexes the shapes as a
triangular mesh (see <a class="xref" href="geo-shape.html#geoshape-indexing-approach" title="Indexing approach">Indexing approach</a>).</p>
<p>Multiple PrefixTree implementations are provided:</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
GeohashPrefixTree - Uses
<a href="http://en.wikipedia.org/wiki/Geohash" class="ulink" target="_top">geohashes</a> for grid squares.
Geohashes are base32 encoded strings of the bits of the latitude and
longitude interleaved. So the longer the hash, the more precise it is.
Each character added to the geohash represents another tree level and
adds 5 bits of precision to the geohash. A geohash represents a
rectangular area and has 32 sub rectangles. The maximum number of levels
in Elasticsearch is 24; the default is 9.
</li>
<li class="listitem">
QuadPrefixTree - Uses a
<a href="http://en.wikipedia.org/wiki/Quadtree" class="ulink" target="_top">quadtree</a> for grid squares.
Similar to geohash, quad trees interleave the bits of the latitude and
longitude the resulting hash is a bit set. A tree level in a quad tree
represents 2 bits in this bit set, one for each coordinate. The maximum
number of levels for the quad trees in Elasticsearch is 29; the default is 21.
</li>
</ul>
</div>
<h5>
<a id="spatial-strategy"></a>Spatial strategies<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<p><span class="Admonishment Admonishment--change">
[<span class="Admonishment-version u-mono u-strikethrough">6.6</span>]
<span class="Admonishment-detail">
Deprecated in 6.6. PrefixTrees no longer used
</span>
</span>  The indexing implementation
selected relies on a  SpatialStrategy for choosing how to decompose the shapes
(either as grid  squares or a tessellated triangular mesh). Each strategy
answers the following:</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
What type of Shapes can be indexed?
</li>
<li class="listitem">
What types of Query Operations and Shapes can be used?
</li>
<li class="listitem">
Does it support more than one Shape per field?
</li>
</ul>
</div>
<p>The following Strategy implementations (with corresponding capabilities)
are provided:</p>
<div class="informaltable">
<table border="1" cellpadding="4px">
<colgroup>
<col class="col_1">
<col class="col_2">
<col class="col_3">
<col class="col_4">
</colgroup>
<thead>
<tr>
<th align="left" valign="top">Strategy</th>
<th align="left" valign="top">Supported Shapes</th>
<th align="left" valign="top">Supported Queries</th>
<th align="left" valign="top">Multiple Shapes</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p><code class="literal">recursive</code></p></td>
<td align="left" valign="top"><p><a class="xref" href="geo-shape.html#input-structure" title="Input Structure">All</a></p></td>
<td align="left" valign="top"><p><code class="literal">INTERSECTS</code>, <code class="literal">DISJOINT</code>, <code class="literal">WITHIN</code>, <code class="literal">CONTAINS</code></p></td>
<td align="left" valign="top"><p>Yes</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">term</code></p></td>
<td align="left" valign="top"><p><a class="xref" href="shape.html#point" title="Point">Points</a></p></td>
<td align="left" valign="top"><p><code class="literal">INTERSECTS</code></p></td>
<td align="left" valign="top"><p>Yes</p></td>
</tr>
</tbody>
</table>
</div>
<h5>
<a id="_accuracy"></a>Accuracy<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<p><code class="literal">Recursive</code> and <code class="literal">Term</code> strategies do not provide 100% accuracy and depending on
how they are configured it may return some false positives for <code class="literal">INTERSECTS</code>,
<code class="literal">WITHIN</code> and <code class="literal">CONTAINS</code> queries, and some false negatives for <code class="literal">DISJOINT</code> queries.
To mitigate this, it is important to select an appropriate value for the tree_levels
parameter and to adjust expectations accordingly. For example, a point may be near
the border of a particular grid cell and may thus not match a query that only matches
the cell right next to it — even though the shape is very close to the point.</p>
<h5>
<a id="_example_5"></a>Example<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT /example
{
    "mappings": {
        "properties": {
            "location": {
                "type": "geo_shape"
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/633.console"></div>
<p>This mapping definition maps the location field to the geo_shape
type using the default vector implementation. It provides
approximately 1e-7 decimal degree precision.</p>
<h5>
<a id="_performance_considerations_with_prefix_trees"></a>Performance considerations with Prefix Trees<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<p><span class="Admonishment Admonishment--change">
[<span class="Admonishment-version u-mono u-strikethrough">6.6</span>]
<span class="Admonishment-detail">
Deprecated in 6.6. PrefixTrees no longer used
</span>
</span> With prefix trees,
Elasticsearch uses the paths in the tree as terms in the inverted index
and in queries. The higher the level (and thus the precision), the more
terms are generated. Of course, calculating the terms, keeping them in
memory, and storing them on disk all have a price. Especially with higher
tree levels, indices can become extremely large even with a modest amount
of data. Additionally, the size of the features also matters. Big, complex
polygons can take up a lot of space at higher tree levels. Which setting
is right depends on the use case. Generally one trades off accuracy against
index size and query performance.</p>
<p>The defaults in Elasticsearch for both implementations are a compromise
between index size and a reasonable level of precision of 50m at the
equator. This allows for indexing tens of millions of shapes without
overly bloating the resulting index too much relative to the input size.</p>
<div class="note admon">
<div class="icon"></div>
<div class="admon_content">
<p>Geo-shape queries on geo-shapes implemented with PrefixTrees will not be executed if
<a class="xref" href="query-dsl.html#query-dsl-allow-expensive-queries"><code class="literal">search.allow_expensive_queries</code></a> is set to false.</p>
</div>
</div>
<h4>
<a id="input-structure"></a>Input Structure<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h4>
<p>Shapes can be represented using either the <a href="http://www.geojson.org" class="ulink" target="_top">GeoJSON</a>
or <a href="http://docs.opengeospatial.org/is/12-063r5/12-063r5.html" class="ulink" target="_top">Well-Known Text</a>
(WKT) format. The following table provides a mapping of GeoJSON and WKT
to Elasticsearch types:</p>
<div class="informaltable">
<table border="1" cellpadding="4px">
<colgroup>
<col class="col_1">
<col class="col_2">
<col class="col_3">
<col class="col_4">
</colgroup>
<thead>
<tr>
<th align="left" valign="top">GeoJSON Type</th>
<th align="left" valign="top">WKT Type</th>
<th align="left" valign="top">Elasticsearch Type</th>
<th align="left" valign="top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="top"><p><code class="literal">Point</code></p></td>
<td align="left" valign="top"><p><code class="literal">POINT</code></p></td>
<td align="left" valign="top"><p><code class="literal">point</code></p></td>
<td align="left" valign="top"><p>A single geographic coordinate. Note: Elasticsearch uses WGS-84 coordinates only.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">LineString</code></p></td>
<td align="left" valign="top"><p><code class="literal">LINESTRING</code></p></td>
<td align="left" valign="top"><p><code class="literal">linestring</code></p></td>
<td align="left" valign="top"><p>An arbitrary line given two or more points.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">Polygon</code></p></td>
<td align="left" valign="top"><p><code class="literal">POLYGON</code></p></td>
<td align="left" valign="top"><p><code class="literal">polygon</code></p></td>
<td align="left" valign="top"><p>A <em>closed</em> polygon whose first and last point
must match, thus requiring <code class="literal">n + 1</code> vertices to create an <code class="literal">n</code>-sided
polygon and a minimum of <code class="literal">4</code> vertices.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">MultiPoint</code></p></td>
<td align="left" valign="top"><p><code class="literal">MULTIPOINT</code></p></td>
<td align="left" valign="top"><p><code class="literal">multipoint</code></p></td>
<td align="left" valign="top"><p>An array of unconnected, but likely related
points.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">MultiLineString</code></p></td>
<td align="left" valign="top"><p><code class="literal">MULTILINESTRING</code></p></td>
<td align="left" valign="top"><p><code class="literal">multilinestring</code></p></td>
<td align="left" valign="top"><p>An array of separate linestrings.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">MultiPolygon</code></p></td>
<td align="left" valign="top"><p><code class="literal">MULTIPOLYGON</code></p></td>
<td align="left" valign="top"><p><code class="literal">multipolygon</code></p></td>
<td align="left" valign="top"><p>An array of separate polygons.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">GeometryCollection</code></p></td>
<td align="left" valign="top"><p><code class="literal">GEOMETRYCOLLECTION</code></p></td>
<td align="left" valign="top"><p><code class="literal">geometrycollection</code></p></td>
<td align="left" valign="top"><p>A GeoJSON shape similar to the
<code class="literal">multi*</code> shapes except that multiple types can coexist (e.g., a Point
and a LineString).</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">N/A</code></p></td>
<td align="left" valign="top"><p><code class="literal">BBOX</code></p></td>
<td align="left" valign="top"><p><code class="literal">envelope</code></p></td>
<td align="left" valign="top"><p>A bounding rectangle, or envelope, specified by
specifying only the top left and bottom right points.</p></td>
</tr>
<tr>
<td align="left" valign="top"><p><code class="literal">N/A</code></p></td>
<td align="left" valign="top"><p><code class="literal">N/A</code></p></td>
<td align="left" valign="top"><p><code class="literal">circle</code></p></td>
<td align="left" valign="top"><p>A circle specified by a center point and radius with
units, which default to <code class="literal">METERS</code>.</p></td>
</tr>
</tbody>
</table>
</div>
<div class="note admon">
<div class="icon"></div>
<div class="admon_content">
<p>For all types, both the inner <code class="literal">type</code> and <code class="literal">coordinates</code> fields are
required.</p>
<p>In GeoJSON and WKT, and therefore Elasticsearch, the correct <span class="strong strong"><strong>coordinate
order is longitude, latitude (X, Y)</strong></span> within coordinate arrays. This
differs from many Geospatial APIs (e.g., Google Maps) that generally
use the colloquial latitude, longitude (Y, X).</p>
</div>
</div>
<h5>
<a id="geo-point-type"></a><a href="http://geojson.org/geojson-spec.html#id2" class="ulink" target="_top">Point</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<p>A point is a single geographic coordinate, such as the location of a
building or the current position given by a smartphone’s Geolocation
API. The following is an example of a point in GeoJSON.</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "point",
        "coordinates" : [-77.03653, 38.897676]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/634.console"></div>
<p>The following is an example of a point in WKT:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "POINT (-77.03653 38.897676)"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/635.console"></div>
<h5>
<a id="geo-linestring"></a><a href="http://geojson.org/geojson-spec.html#id3" class="ulink" target="_top">LineString</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<p>A <code class="literal">linestring</code> defined by an array of two or more positions. By
specifying only two points, the <code class="literal">linestring</code> will represent a straight
line.  Specifying more than two points creates an arbitrary path. The
following is an example of a LineString in GeoJSON.</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "linestring",
        "coordinates" : [[-77.03653, 38.897676], [-77.009051, 38.889939]]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/636.console"></div>
<p>The following is an example of a LineString in WKT:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "LINESTRING (-77.03653 38.897676, -77.009051 38.889939)"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/637.console"></div>
<p>The above <code class="literal">linestring</code> would draw a straight line starting at the White
House to the US Capitol Building.</p>
<h5>
<a id="geo-polygon"></a><a href="http://www.geojson.org/geojson-spec.html#id4" class="ulink" target="_top">Polygon</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<p>A polygon is defined by a list of a list of points. The first and last
points in each (outer) list must be the same (the polygon must be
closed). The following is an example of a Polygon in GeoJSON.</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "polygon",
        "coordinates" : [
            [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/638.console"></div>
<p>The following is an example of a Polygon in WKT:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "POLYGON ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0))"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/639.console"></div>
<p>The first array represents the outer boundary of the polygon, the other
arrays represent the interior shapes ("holes"). The following is a GeoJSON example
of a polygon with a hole:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "polygon",
        "coordinates" : [
            [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ],
            [ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/640.console"></div>
<p>The following is an example of a Polygon with a hole in WKT:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "POLYGON ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8, 100.2 0.2))"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/641.console"></div>
<p><span class="strong strong"><strong>IMPORTANT NOTE:</strong></span> WKT does not enforce a specific order for vertices thus
ambiguous polygons around the dateline and poles are possible.
<a href="https://tools.ietf.org/html/rfc7946#section-3.1.6" class="ulink" target="_top">GeoJSON</a> mandates that the
outer polygon must be counterclockwise and interior shapes must be clockwise,
which agrees with the Open Geospatial Consortium (OGC)
<a href="http://www.opengeospatial.org/standards/sfa" class="ulink" target="_top">Simple Feature Access</a>
specification for vertex ordering.</p>
<p>Elasticsearch accepts both clockwise and counterclockwise polygons if they
appear not to cross the dateline (i.e. they cross less than 180° of longitude),
but for polygons that do cross the dateline (or for other polygons wider than
180°) Elasticsearch requires the vertex ordering to comply with the OGC and
GeoJSON specifications. Otherwise, an unintended polygon may be created and
unexpected query/filter results will be returned.</p>
<p>The following provides an example of an ambiguous polygon.  Elasticsearch will
apply the GeoJSON standard to eliminate ambiguity resulting in a polygon that
crosses the dateline.</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "polygon",
        "coordinates" : [
            [ [-177.0, 10.0], [176.0, 15.0], [172.0, 0.0], [176.0, -15.0], [-177.0, -10.0], [-177.0, 10.0] ],
            [ [178.2, 8.2], [-178.8, 8.2], [-180.8, -8.8], [178.2, 8.8] ]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/642.console"></div>
<p>An <code class="literal">orientation</code> parameter can be defined when setting the geo_shape mapping (see <a class="xref" href="geo-shape.html#geo-shape-mapping-options" title="Mapping Options">Mapping Options</a>). This will define vertex
order for the coordinate list on the mapped geo_shape field. It can also be overridden on each document.  The following is an example for
overriding the orientation on a document:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "polygon",
        "orientation" : "clockwise",
        "coordinates" : [
            [ [100.0, 0.0], [100.0, 1.0], [101.0, 1.0], [101.0, 0.0], [100.0, 0.0] ]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/643.console"></div>
<h5>
<a id="geo-multipoint"></a><a href="http://www.geojson.org/geojson-spec.html#id5" class="ulink" target="_top">MultiPoint</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<p>The following is an example of a list of geojson points:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "multipoint",
        "coordinates" : [
            [102.0, 2.0], [103.0, 2.0]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/644.console"></div>
<p>The following is an example of a list of WKT points:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "MULTIPOINT (102.0 2.0, 103.0 2.0)"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/645.console"></div>
<h5>
<a id="geo-multilinestring"></a><a href="http://www.geojson.org/geojson-spec.html#id6" class="ulink" target="_top">MultiLineString</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<p>The following is an example of a list of geojson linestrings:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "multilinestring",
        "coordinates" : [
            [ [102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0] ],
            [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0] ],
            [ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8] ]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/646.console"></div>
<p>The following is an example of a list of WKT linestrings:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "MULTILINESTRING ((102.0 2.0, 103.0 2.0, 103.0 3.0, 102.0 3.0), (100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8))"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/647.console"></div>
<h5>
<a id="geo-multipolygon"></a><a href="http://www.geojson.org/geojson-spec.html#id7" class="ulink" target="_top">MultiPolygon</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<p>The following is an example of a list of geojson polygons (second polygon contains a hole):</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "multipolygon",
        "coordinates" : [
            [ [[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]] ],
            [ [[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],
              [[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]] ]
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/648.console"></div>
<p>The following is an example of a list of WKT polygons (second polygon contains a hole):</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "MULTIPOLYGON (((102.0 2.0, 103.0 2.0, 103.0 3.0, 102.0 3.0, 102.0 2.0)), ((100.0 0.0, 101.0 0.0, 101.0 1.0, 100.0 1.0, 100.0 0.0), (100.2 0.2, 100.8 0.2, 100.8 0.8, 100.2 0.8, 100.2 0.2)))"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/649.console"></div>
<h5>
<a id="geo-geometry_collection"></a><a href="http://geojson.org/geojson-spec.html#geometrycollection" class="ulink" target="_top">Geometry Collection</a><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<p>The following is an example of a collection of geojson geometry objects:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type": "geometrycollection",
        "geometries": [
            {
                "type": "point",
                "coordinates": [100.0, 0.0]
            },
            {
                "type": "linestring",
                "coordinates": [ [101.0, 0.0], [102.0, 1.0] ]
            }
        ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/650.console"></div>
<p>The following is an example of a collection of WKT geometry objects:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "GEOMETRYCOLLECTION (POINT (100.0 0.0), LINESTRING (101.0 0.0, 102.0 1.0))"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/651.console"></div>
<h5>
<a id="_envelope"></a>Envelope<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<p>Elasticsearch supports an <code class="literal">envelope</code> type, which consists of coordinates
for upper left and lower right points of the shape to represent a
bounding rectangle in the format <code class="literal">[[minLon, maxLat], [maxLon, minLat]]</code>:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "envelope",
        "coordinates" : [ [100.0, 1.0], [101.0, 0.0] ]
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/652.console"></div>
<p>The following is an example of an envelope using the WKT BBOX format:</p>
<p><span class="strong strong"><strong>NOTE:</strong></span> WKT specification expects the following order: minLon, maxLon, maxLat, minLat.</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : "BBOX (100.0, 102.0, 2.0, 0.0)"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/653.console"></div>
<h5>
<a id="_circle"></a>Circle<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h5>
<p>Elasticsearch supports a <code class="literal">circle</code> type, which consists of a center
point with a radius. Note that this circle representation can only
be indexed when using the <code class="literal">recursive</code> Prefix Tree strategy. For
the default <a class="xref" href="geo-shape.html#geoshape-indexing-approach" title="Indexing approach">Indexing approach</a> circles should be approximated using
a <code class="literal">POLYGON</code>.</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /example/_doc
{
    "location" : {
        "type" : "circle",
        "coordinates" : [101.0, 1.0],
        "radius" : "100m"
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/654.console"></div>
<p>Note: The inner <code class="literal">radius</code> field is required. If not specified, then
the units of the <code class="literal">radius</code> will default to <code class="literal">METERS</code>.</p>
<p><span class="strong strong"><strong>NOTE:</strong></span> Neither GeoJSON or WKT support a point-radius circle type.</p>
<h4>
<a id="_sorting_and_retrieving_index_shapes"></a>Sorting and Retrieving index Shapes<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/types/geo-shape.asciidoc">edit</a>
</h4>
<p>Due to the complex input structure and index representation of shapes,
it is not currently possible to sort shapes or retrieve their fields
directly. The geo_shape value is only retrievable through the <code class="literal">_source</code>
field.</p>
</div>
<div class="navfooter">
<span class="prev">
<a href="geo-point.html">« Geo-point datatype</a>
</span>
<span class="next">
<a href="ip.html">IP datatype »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
